package com.xyj.rxhui.week00;


import java.util.PriorityQueue;

import com.xyj.common.ListNode;

/**
 * 优先级队列的方式。
 * @author GuXiaoYao
 * @version 1.0.0
 * @since 2021/11/26
 */
public class T3 {

//    public static ListNode[] produceList

//    PriorityQueue
public static void main(String[] args) {
    ListNode[] listNodes = T2.initNodes();
    System.out.println(mergeNodes(listNodes));
}
    public static ListNode mergeNodes(ListNode[] listNodes){

        if (listNodes==null||listNodes.length==0) {
            return null;
        }
        ListNode one=new ListNode(-1);
        ListNode help=one;
        PriorityQueue<ListNode> priorityQueue=new PriorityQueue<>(listNodes.length,(a,b)->a.val-b.val);
        for (ListNode listNode : listNodes) {
            if (listNode!=null) {
                priorityQueue.add(listNode);
            }
        }
        //遍历这个优先级队列，然后一直拉取元素,被拉取的元素插入其下个节点的元素，失效当前元素
        while(!priorityQueue.isEmpty()){
            // 维护one链表的下一个节点是升序排列
            ListNode poll = priorityQueue.poll();
            if (poll.next!=null) {
                priorityQueue.add(poll.next);
            }
            one.next =poll;
            one=one.next;
        }
        return help.next;

    }
}
